﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace SksApp
{
    public partial class frmInputDialog : Form
    {
        public enum ListeTipleri
        {
            Cari,
            Bekleyen,
            MasrafOran,
            MasrafTutar,
            FisListesi,
            IskontoOran,
            IskontoTutar,
            Satici,
            AdminSifre,
            FiyatGirisi
        }

        public frmInputDialog()
        {
            InitializeComponent();
        }
        public string resultValue { get; set; }

        public ListeTipleri ListeTipi { get; set; }

        private bool HarfKontrol(string filtre)
        {
            return Convert.ToBoolean(filtre.ToCharArray().Where(x => !char.IsNumber(x)).Count());
        }
        private string HarfTemizle(string filtre)
        {
            if (HarfKontrol(filtre))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(filtre.ToCharArray().Where(x => Char.IsNumber(x)).ToArray());
                return sb.ToString();
            }
            else
                return filtre;
        }

        private void Find(string filter)
        {
            switch (this.ListeTipi)
            {
                case ListeTipleri.Cari:
                    using (SksEntity ent = new SksEntity())
                    {
                        var result = ent.Musteriler.Where(x => x.Kodu == filter || x.KartNo == filter).FirstOrDefault();
                        if (result != null)
                        {
                            this.resultValue = result.Kodu;
                            this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                            this.Close();
                        }
                        else
                        {
                            lblHeader.ForeColor = Color.Red;
                            lblHeader.Text = "Müşteri Bulunamadı !";
                            txtFilter.Select(0, txtFilter.Text.Length);
                        }
                    }
                    break;
                case ListeTipleri.Satici:
                    //using (SksEntity ent = new SksEntity())
                    //{
                    //    var sonuc = ent.Kasiyerler.Where(x => x.Kodu == filter && x.KasadaCalismaz == true).FirstOrDefault();
                    //    if (sonuc != null)
                    //    {
                    //        this.resultValue = sonuc.ID.ToString();
                    //        this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                    //        this.Close();
                    //    }
                    //    else
                    //    {
                    //        lblHeader.AppearanceCaption.BackColor = Color.Red;
                    //        lblHeader.Text = "Satıcı Bulunamadı !";
                    //        txtFilter.Select(0, txtFilter.Text.Length);
                    //    }
                    //}
                    break;
                case ListeTipleri.Bekleyen:
                    //using (Senkronize.ServerEntities srvent = Database.CreateMagazaContex())
                    //{
                    //    int refNo = int.Parse(HarfTemizle(filter));
                    //    var result2 = srvent.Bekleyenler.Where(x => x.ReferansNo == refNo).FirstOrDefault();
                    //    if (result2 != null)
                    //    {
                    //        this.resultValue = result2.ReferansNo.ToString();
                    //        this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                    //        this.Close();
                    //    }
                    //    else
                    //    {
                    //        lblHeader.AppearanceCaption.BackColor = Color.Red;
                    //        lblHeader.Text = "Fiş Bulunamadı !";
                    //        txtFilter.Select(0, txtFilter.Text.Length);
                    //    }
                    //}
                    break;
                case ListeTipleri.FisListesi:
                    //if (string.IsNullOrEmpty(filter))
                    //    return;
                    //DateTime tarih1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                    //DateTime tarih2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
                    //int refNo3 = int.Parse(HarfTemizle(filter));
                    //using (SmartPosEntities ent = Database.CreateLocalContex())
                    //{
                    //    var result3 = ent.UstBilgiler.Where(c => c.Tarih >= tarih1 && c.Tarih <= tarih2 && c.FisNo == refNo3).FirstOrDefault();
                    //    if (result3 != null)
                    //    {
                    //        this.resultValue = result3.FisNo.ToString();
                    //        this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                    //        this.Close();
                    //    }
                    //    else
                    //    {
                    //        lblHeader.AppearanceCaption.BackColor = Color.Red;
                    //        lblHeader.Text = "Fiş Bulunamadı !";
                    //        txtFilter.Select(0, txtFilter.Text.Length);
                    //    }
                    //}
                    break;
                case ListeTipleri.FiyatGirisi:
                case ListeTipleri.IskontoOran:
                case ListeTipleri.IskontoTutar:
                case ListeTipleri.MasrafTutar:
                case ListeTipleri.MasrafOran:
                    this.resultValue = filter;
                    this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                    this.Close();
                    break;
                case ListeTipleri.AdminSifre:
                    using (SksEntity ent = new SksEntity())
                    {
                        string sifre = ent.Kasiyerler.Where(x => x.No == 1).Select(x => x.Sifresi).FirstOrDefault();
                        if (sifre == txtFilter.Text)
                        {
                            this.resultValue = "OK";
                            this.DialogResult = System.Windows.Forms.DialogResult.Yes;
                            this.Close();
                        }
                    }
                    break;
            }
        }


        public frmInputDialog(ListeTipleri tip)
        {
            InitializeComponent();
            ListeTipi = tip;
            switch (tip)
            {
                case ListeTipleri.Cari:
                    lblHeader.Text = "Kartı Okutun";
                    btnYeniMusteri.Visible = true;
                    break;
                case ListeTipleri.Bekleyen:
                    lblHeader.Text = "Referans Numarasını girin";
                    break;
                case ListeTipleri.FisListesi:
                    lblHeader.Text = "Fiş Numarasını girin";
                    break;
                case ListeTipleri.MasrafOran:
                    lblHeader.Text = "Masraf Oranını girin";
                    btnListe.Visible = false;
                    break;
                case ListeTipleri.MasrafTutar:
                    lblHeader.Text = "Masraf Tutarı girin";
                    btnListe.Visible = false;
                    break;
                case ListeTipleri.IskontoOran:
                    lblHeader.Text = "Iskonto Oranını girin";
                    btnListe.Visible = false;
                    break;
                case ListeTipleri.IskontoTutar:
                    lblHeader.Text = "Iskonto Tutarı girin";
                    btnListe.Visible = false;
                    break;
                case ListeTipleri.Satici:
                    lblHeader.Text = "Satıcı Seçin";
                    break;
                case ListeTipleri.AdminSifre:
                    lblHeader.Text = "Yetkili Şifresini Giriniz";
                    txtFilter.PasswordChar = '*';
                    break;
                case ListeTipleri.FiyatGirisi:
                    lblHeader.Text = "Satış Fiyatını giriniz";
                    btnListe.Visible = false;
                    break;
            }

            txtFilter.KeyDown += (ss, ee) =>
            {
                if (ee.KeyCode == Keys.Enter)
                {
                    Find(txtFilter.Text);
                }
            };

            txtFilter.TextChanged += (ss, ee) =>
            {
                switch (tip)
                {
                    case ListeTipleri.Cari:
                        lblHeader.Text = "Kartı Okutun";
                        break;
                    case ListeTipleri.Bekleyen:
                        lblHeader.Text = "Referans Numarasını girin";
                        break;
                    case ListeTipleri.FisListesi:
                        lblHeader.Text = "Fiş Numarasını girin";
                        break;
                }
            };
        }

        private void btnListe_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Retry;
            this.Close();
        }

        private void Buton_Click(object sender, EventArgs e)
        {
            if (((Button)sender).Tag != null)
            {
                if (((Button)sender).Tag.ToString().IndexOf('<') > -1)
                {
                    if (txtFilter.Text.Length > 0)
                    {
                        txtFilter.Text = txtFilter.Text.Remove(txtFilter.Text.Length - 1, 1);
                    }
                }
                else if (((Button)sender).Tag.ToString().IndexOf(',') > -1)
                {
                    if (txtFilter.Text.IndexOf(',') == -1)
                        txtFilter.Text += ((Button)sender).Tag.ToString();
                }
                else
                    txtFilter.Text += ((Button)sender).Tag.ToString();

                txtFilter.Select(txtFilter.TextLength, 0);
            }
        }

        private void frmInputDialog_Load(object sender, EventArgs e)
        {
            string decimalChar = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
            btnVirgul.Text = decimalChar;
            btnVirgul.Tag = decimalChar;
        }

        private void txtFilter_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.OemPeriod || e.KeyCode == Keys.Decimal || e.KeyCode == Keys.Oemcomma)
            {
                txtFilter.Text = txtFilter.Text.Replace(',', Convert.ToChar(Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator));
                txtFilter.Select(txtFilter.Text.Length, 0);
            }
        }

        private void btnTamam_Click(object sender, EventArgs e)
        {
            Find(txtFilter.Text);
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Close();
        }
    }
}
